package example.java.lang.annotation;

/**
 * Show all annotations for a class and a method.
 */

import java.lang.annotation.*;
import java.lang.reflect.Method;

@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno2 {
	String str();

	int val();
}

@Retention(RetentionPolicy.RUNTIME)
@interface What {
	String description();
}

@What(description = "An annotation test class")
@MyAnno(str = "Meta2", val = 99)
public class Meta2 {

	@What(description = "An annotation test method")
	@MyAnno(str = "Testing", val = 100)
	public static void myMeth() throws SecurityException, NoSuchMethodException {
		Meta2 ob = new Meta2();

		Annotation[] annos = ob.getClass().getAnnotations();

		// Display all annotations for Meta2.
		System.out.println("All annotations for Meta2:");

		for (Annotation a : annos)
			System.out.println(a);

		System.out.println();

		// Display all annotations for myMeth.
		Method m = ob.getClass().getMethod("myMeth");
		annos = m.getAnnotations();

		System.out.println("All annotations for myMeth:");
		for (Annotation a : annos)
			System.out.println(a);
	}

	public static void main(String[] args) throws SecurityException, NoSuchMethodException {
		myMeth();
	}

}
